package com.pay.service.inter;

import java.util.Map;


/**
 * 微信 service
 *
 * @author MENG
 * @version 2018/7/11
 * @see
 */
public interface WeixinpayService
{

    /**
     *
     * 微信扫码 支付
     *
     * @param appId
     * @param mchId
     * @param apiKey
     * @param notifyUrl
     * @param outTradeNo
     * @param discountAmount
     * @param subject
     * @param qrpayouttime
     * @return
     */
    Map<String,Object> scanPay(String appId, String mchId, String apiKey, String notifyUrl,
                               String outTradeNo, String discountAmount,
                               String subject, String qrpayouttime);

    /**
     * 付款码支付
     *
     * @param appId
     * @param mchId
     * @param apiKey
     * @param notifyUrl
     * @param outTradeNo
     * @param discountAmount
     * @param subject
     * @param authCode
     * @param qrpayouttime
     *
     * @return  ordercode 订单号,discountamount 付款金额,qrpayouttime 付款码吊起密码支付超时时间
     *
     */
    Map<String,Object> weixinCode(String appId, String mchId, String apiKey, String notifyUrl,
                                  String outTradeNo,
                                  String discountAmount, String subject, String authCode,
                                  String qrpayouttime);

    /**
     * 微信退款
     *
     * @param appId
     * @param mchId
     * @param apiKey
     * @param outTradeNo
     * @param refundAmount
     * @param refundReason
     *
     *
     * @return ordercode 商户订单号,refundamount 退款金额,refundreason 退款原因
     *
     * resultCode 返回的结果代码 0000表示成功,resultMsg 返回的结果信息
     */
    Map<String,Object> weixinRefund(String appId, String mchId, String apiKey, String outTradeNo,
                      String refundAmount, String refundReason);

    /**
     *
     * 微信手机H5 下单
     *
     * @param appId
     * @param mchId
     * @param apiKey
     * @param notifyUrl
     * @param orderNo
     * @param totalAmount
     * @param subject
     * @param timeoutExpress
     * @param sceneInfo
     * @return
     */
    Map<String,Object> wxPayMobileWeb(String appId, String mchId, String apiKey, String notifyUrl,
                        String orderNo, String totalAmount, String subject, String timeoutExpress,
                        String sceneInfo);

    /**
     * 微信内部浏览器H5支付
     * @param appId
     * @param mchId
     * @param apiKey
     * @param notifyUrl
     * @param orderNo
     * @param totalAmount
     * @param subject
     * @param timeoutExpress
     * @param sceneInfo
     * @param openId
     * @return
     */
    Map<String,Object> wxPayMobileWechatWeb(String appId, String mchId, String apiKey,
                                            String notifyUrl,
                                            String orderNo, String totalAmount, String subject,
                                            String timeoutExpress, String sceneInfo, String openId);

    /**
     * 微信部分退款
     *
     * @param appId
     * @param mchId
     * @param apiKey
     * @param orderNo
     * @param refundAmount
     * @param refundReason
     * @param totalAmount
     * @param sunOrderCode
     * @return
     */
    Map<String,Object> wxPayRebate(String appId, String mchId, String apiKey, String orderNo,
                     String refundAmount, String refundReason, String totalAmount,
                     String sunOrderCode);

//    /**
//     * 小程序下单
//     *
//     * @param appId         微信分配的小程序ID
//     * @param mchId         微信支付分配的商户号
//     * @param apiKey        APIKEY
//     * @param subject       商品简单描述
//     * @param outTradeNo    商户系统内部订单号 要求32个字符内
//     * @param timeExpire    订单失效时间，格式为yyyyMMddHHmmss
//     * @param totalFee      订单总金额
//     * @param notifyUrl     异步接收微信支付结果通知的回调地址，通知url必须为外网可访问的url
//     * @param openid        用户在商户appid下的唯一标识 openId 获取地址（https://developers.weixin.qq.com/miniprogram/dev/api/open-api/login/wx.login.html）
//     */
//    void wxAppletPay(String appId, String mchId, String apiKey, String subject, String outTradeNo,String timeExpire,
//                     String totalFee, String notifyUrl, String openid);
}
